package top.lixunda.ecommerce.server.user.api.entity.db;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.extension.activerecord.Model;

import java.time.LocalDateTime;
import java.io.Serializable;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 角色表，可以代表一种权限，分为官方后台角色和店铺角色，店铺角色每家店铺独享
 *
 * @author Xumda
 * @since 2020-04-23
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("role")
public class RoleDO extends Model<RoleDO> {

    private static final long serialVersionUID=1L;

    /**
     * 角色编号
     */
    @TableId(value = "role_id", type = IdType.AUTO)
    private Integer roleId;

    /**
     * 角色所属管理类型，STORE 和 ADMIN
     */
    @TableField("manage_type")
    private String manageType;

    /**
     * 店铺编号，当 Type=STORE 时有效
     */
    @TableField("store_id")
    private Integer storeId;

    /**
     * 店铺名称，当 Type=STORE 时有效
     */
    @TableField("store_name")
    private String storeName;

    /**
     * 角色名称
     */
    @TableField(value = "role_name", updateStrategy = FieldStrategy.IGNORED)
    private String roleName;

    /**
     * 角色描述
     */
    @TableField(value = "role_desc", updateStrategy = FieldStrategy.IGNORED)
    private String roleDesc;

    /**
     * 角色有效开始时间，时间段以为将无法享受角色权限
     */
    @TableField(value = "role_begin_time", updateStrategy = FieldStrategy.IGNORED)
    private LocalDateTime roleBeginTime;

    /**
     * 角色有效结束时间，时间段以为将无法享受角色权限
     */
    @TableField(value = "role_end_time", updateStrategy = FieldStrategy.IGNORED)
    private LocalDateTime roleEndTime;

    /**
     * 是否是店铺使用角色，如店铺超级管理员角色，普通店铺管理员角色
     */
    @TableField("store_employ")
    private Integer storeEmploy;

    /**
     * 是否固化角色，固化的角色不能修改或必须另外的特殊接口进行修改，防止出错
     */
    @TableField("solidify_flag")
    private Integer solidifyFlag;

    /**
     * 创建时间
     */
    @TableField("create_time")
    private LocalDateTime createTime;

    /**
     * 创建人员编号
     */
    @TableField("create_user_id")
    private Integer createUserId;

    /**
     * 创建人员名称
     */
    @TableField("create_user_name")
    private String createUserName;

    /**
     * 创建人员类型
     */
    @TableField("create_user_type")
    private String createUserType;

    /**
     * 备注
     */
    @TableField("remark")
    private String remark;

    /**
     * 删除时间
     */
    @TableField("remove_time")
    private LocalDateTime removeTime;

    /**
     * 删除人员编号
     */
    @TableField("remove_user_id")
    private Integer removeUserId;

    /**
     * 删除人员名称
     */
    @TableField("remove_user_name")
    private String removeUserName;

    /**
     * 删除人员类型
     */
    @TableField("remove_user_type")
    private String removeUserType;

    /**
     * 逻辑删除字段
     */
    @TableField("usable")
    @TableLogic
    @JsonIgnore
    private Integer usable;


    @Override
    protected Serializable pkVal() {
        return this.roleId;
    }

}
